const fs=require('fs')

//1.普通读取文件方式
// var fpath='./files/1.txt'
// fs.readFile(fpath,'utf-8',(err,data)=>{
//     if(err) throw err
//     console.log(data)
// })

// //2.封装读取文件的方法-方法
// function getFile(fpath,callback){
//     fs.readFile(fpath,'utf-8',(err,data)=>{
//         if(err) return callback(err)
//         callback(data)
//     })
// }
// //2.回调地狱，嵌套调用-调用
// getFile('./files/1.txt',function(data){
//     console.log(data)
//     getFile('./files/2.txt',function(data){
//         console.log(data)
//         getFile('./files/3.txt',function(data){
//             console.log(data)
//         })
//     })
// })


//3.Promise：
// 3.1  构造函数， new Promise()
// 3.2  有两个函数，resolve(成功回调函数)和reject(失败回调函数)
// 3.3  Promise 构造函数的 Prototype上有一个 .than() 方法，new出来的实例都可以访问
// 3.4  用 new Promise 的实例 就表示是一个异步操作,实例化时 直接执行，不用我们手动调用
// 3.5  异步操作，不能 return 把结果返回给调用者，只能使用回调函数 返回结果
function getFile(fpath){
    return new Promise((resolve,reject)=>{
        fs.readFile(fpath,'utf-8',(err,data)=>{
            if(err) return reject(err)
            resolve(data)
        })
    })
}

getFile('./files/1.txt')
.then((data)=>{
    console.log(data);
    return getFile('./files/2.txt')
}
// //第一种捕获异常的方式：单独指定获取文件失败的函数，捕获到异常，程序不终止
// ,(err)=>{
//     console.log(err.message);
//     return getFile('./files/2.txt')
// }
)
.then((data)=>{
    console.log(data);
    return getFile('./files/3.txt')
}).then((data)=>{
    console.log(data);
})
//第二种捕获异常的方式：catch 捕获到异常程序终止
.catch((err)=>{
    console.log(err.message);
})